// #pragma once

// #include <iostream>
// #include <vector>
// #include <string>
// #include <unistd.h>
// #include <sys/types.h>
// #include <functional>
// #include <signal.h>

// #include "Listener.hpp"
// #include "HandlerConnection.hpp"
// using namespace std;

// class ProcessPool;
// using task_sub = function<void(ProcessPool *)>;
// using task_main = function<void(ProcessPool *)>;
// class ProccessPool
// {
// public:
//     ProccessPool(int poolsize, task_sub task_sub, task_main task_main, Listener &listener, HandlerConnection &hc)
//         : _poolsize(poolsize),
//           _task_main(task_main),
//           _task_sub(task_sub),
//           _listener(listener),
//           _hc(hc)
//     {
//     }
//     void Start()
//     {
//         pipe(_pipefd);
//         for (int i = 0; i < _poolsize; ++i)
//         {
//             pid_t pid = fork();
//             if (pid == 0)
//             {
//                 ::close(_pipefd[1]);
//                 _task_sub(this);
//                 exit(0);
//             }
//             else
//             {
//                 _v.emplace_back(pid);
//             }
//         }
//         ::close(_pipefd[0]);
//         _task_main(this);
//     }
//     void Stop()
//     {
//         for (auto e : _v)
//         {
//             ::kill(e, 1);
//         }
//         _v.clear();
//     }
//     ~ProccessPool() {}
//     int ReadPipe()
//     {
//         return _pipefd[0];
//     }
//     int WritePipe()
//     {
//         return _pipefd[1];
//     }

// private:
//     int _poolsize;
//     int _pipefd[2];
//     std::vector<pid_t> _v;
//     task_sub _task_sub;
//     task_main _task_main;
//     Listener &_listener;
//     HandlerConnection &_hc
// };